/**
 * 对模型的输出做解析等操作
 */
const extractCodeBlocks = (str) => {
  if (!str) {
    return [];
  }

  // 正则表达式匹配所有的代码块内容
  // ``` 开头，``` 结尾，中间包含任意字符，包括换行符
  // 捕获组 $1 匹配代码块内容
  const matches = str.match(/```[\s\S]*?\n([\s\S]*?)\n```/g);

  // 如果找到了匹配项，返回提取的内容，否则返回空数组
  // 使用 map 函数对匹配到的结果进行处理，提取代码块内容并去除空格
  return matches
    ? matches.map((match) =>
        match.replace(/```[\s\S]*?\n([\s\S]*?)\n```/, "$1").trim()
      )
    : [];
};

const parseAST = (astString) => {
  // 假设 AST 是以 JSON 格式返回的，你需要根据实际情况解析 AST 字符串
  try {
    // const ast = JSON.parse(astString);
    return astString;
  } catch (error) {
    console.error("Failed to parse AST:", error);
    return null; // 处理解析失败的情况
  }
};

module.exports = { extractCodeBlocks, parseAST };
